https://leetcode.cn/problems/fpTFWP/
//class Solution
//{
//    int m, n;
//    int dp[201][201];
//    int dx[4] = { 0,-1,1,0 };
//    int dy[4] = { -1,0,0,1 };
//public:
//    int longestIncreasingPath(vector<vector<int>>& matrix)
//    {
//        int max1 = 0;
//        m = matrix.size(), n = matrix[0].size();
//        for (int i = 0; i < m; i++)
//        {
//            for (int j = 0; j < n; j++)
//            {
//                max1 = max(dfs(i, j, matrix), max1);
//            }
//        }
//        return max1;
//    }
//    int dfs(int i, int j, vector<vector<int>>& matrix)
//    {
//        if (dp[i][j]) return dp[i][j];
//        int ret = 1;
//        for (int k = 0; k < 4; k++)
//        {
//            int x = i + dx[k];
//            int y = j + dy[k];
//            if (x >= 0 && x < m && y >= 0 && y<n && matrix[x][y]>matrix[i][j])
//            {
//                ret = max(ret, dfs(x, y, matrix) + 1);
//            }
//        }
//        dp[i][j] = ret;
//        return dp[i][j];
//    }
//};



https://leetcode.cn/problems/guess-number-higher-or-lower-ii/description/
//class Solution
//{
//    int memo[201][201];
//public:
//    int getMoneyAmount(int n)
//    {
//        return dfs(1, n);
//    }
//
//    int dfs(int left, int right)
//    {
//        if (left >= right) return 0;
//        if (memo[left][right]) return memo[left][right];
//
//        int ret = 0x3f3f3f3f;
//        for (int i = left; i <= right; i++)
//        {
//            int x = dfs(left, i - 1);
//            int y = dfs(i + 1, right);
//            ret = min(ret, i + max(x, y));
//        }
//        memo[left][right] = ret;
//        return ret;
//    }
//};